<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // Function Object 既是实例也是方法。

        //  所有函数都是Funtion的实例，包括Object也是Funtion的实例。

        console.log(Object.prototype);

        const Fn = function () { }
        let fn = new Fn()


        console.log(Fn.__proto__ === Function.prototype);//所有方法的隐式原型，都等于Function的显示原型

        console.log(Fn.prototype === fn.__proto__);//实例对象=== 构造函数的原型对象

        console.log(Fn.prototype.__proto__ === Object.prototype);//所有方法的原型对象，其实是一个Object的空实例对象 {}，

        console.log(Object.__proto__ === Function.prototype);// Object是Function的实例

        console.log(Function.__proto__ === Function.prototype);// Function是自己的实例，自己new的


        console.log(Function instanceof Function);
        console.log(Object instanceof Function);
        console.log(Object instanceof Object);//Object 是Function的实例对象，Function.prototype.__proto__ 又指向 Object.prototype。
        console.log(Fn instanceof Fn);//Fn是Function的实例，


        // 测试案例

        const A = function () {

        }
        A.prototype.n = 1
        var b = new A()
        A.prototype = {
            n: 2,
            m: 3,
        }

        var c = new A()


        console.log(b.n, b.m, c.n, c.m);

    </script>
</body>

</html>